暴露redis

您所在的位置:网站首页 redis 集群访问 暴露redis

暴露redis

2024-07-12 14:00| 来源: 网络整理| 查看: 265

针对上述的第一个问题,使用Node port的方式,将集群中的6个节点暴露到集群外部。

在下面的配置文件中, 将为redis cluster集群中的每个节点(通过spec.selector关联pod)创建一个NodePort类型的Service, 并将客户端通信端口6379端口和集群总线端口16379暴露到集群的不同端口上。

例如这里的节点redis-cluster-alpha-leader-0, 其客户端通信端口6379暴露为k8s集群Node的31000端口,其集群总线端口16379被暴露为k8s集群Node上的32000端口。

之所以还需要暴露集群总线端口,是因为我们后面需要通过修改cluster-announce-ip的方式来让cluster nodes的输出中ip地址可被集群外部访问,而cluster-announce-ip的值一旦被修改,集群中的其他节点会使用该配置指定的地址来进行节点通信,此时如果不将集群总线端口也暴露到k8s集群Node上,将导致节点之间无法通信。

apiVersion: v1 kind: Service metadata: name: redis-cluster-alpha-leader-0 spec: selector: statefulset.kubernetes.io/pod-name: redis-cluster-alpha-leader-0 ports: - name: client-port port: 6379 protocol: TCP targetPort: 6379 nodePort: 31000 # 当type为NodePort或LoadBalancer时,公开此服务的每个节点上的端口。通常由系统分配。如果指定了一个范围内的值,并且没有被使用,则将使用该值,否则操作将失败。如果不指定,如果该服务需要,将分配一个端口。如果在创建不需要该字段的服务时指定了该字段,则创建将失败。当一个服务更新到不再需要它时,这个字段将被删除(例如,将类型从NodePort改为ClusterIP) - name: bus-port port: 16379 protocol: TCP targetPort: 16379 nodePort: 32000 type: NodePort --- apiVersion: v1 kind: Service metadata: name: redis-cluster-alpha-leader-1 spec: selector: statefulset.kubernetes.io/pod-name: redis-cluster-alpha-leader-1 ports: - name: client-port port: 6379 protocol: TCP targetPort: 6379 nodePort: 31001 - name: bus-port port: 16379 protocol: TCP targetPort: 16379 nodePort: 32001 type: NodePort --- apiVersion: v1 kind: Service metadata: name: redis-cluster-alpha-leader-2 # 改 spec: selector: statefulset.kubernetes.io/pod-name: redis-cluster-alpha-leader-2 # 改 ports: - name: client-port port: 6379 protocol: TCP targetPort: 6379 nodePort: 31002 # 改 - name: bus-port port: 16379 protocol: TCP targetPort: 16379 nodePort: 32002 # 改 type: NodePort --- apiVersion: v1 kind: Service metadata: name: redis-cluster-alpha-follower-0 # 改 spec: selector: statefulset.kubernetes.io/pod-name: redis-cluster-alpha-follower-0 # 改 ports: - name: client-port port: 6379 protocol: TCP targetPort: 6379 nodePort: 31100 # 改 - name: bus-port port: 16379 protocol: TCP targetPort: 16379 nodePort: 32100 # 改 type: NodePort --- apiVersion: v1 kind: Service metadata: name: redis-cluster-alpha-follower-1 # 改 spec: selector: statefulset.kubernetes.io/pod-name: redis-cluster-alpha-follower-1 # 改 ports: - name: client-port port: 6379 protocol: TCP targetPort: 6379 nodePort: 31101 # 改 - name: bus-port port: 16379 protocol: TCP targetPort: 16379 nodePort: 32101 # 改 type: NodePort --- apiVersion: v1 kind: Service metadata: name: redis-cluster-alpha-follower-2 # 改 spec: selector: statefulset.kubernetes.io/pod-name: redis-cluster-alpha-follower-2 # 改 ports: - name: client-port port: 6379 protocol: TCP targetPort: 6379 nodePort: 31102 # 改 - name: bus-port port: 16379 protocol: TCP targetPort: 16379 nodePort: 32102 # 改 type: NodePort

完成后结果如下:

[root@k8s-master redis]# kubectl get svc | grep NodePort redis-cluster-alpha-follower-0 NodePort 10.96.107.8 6379:31100/TCP,16379:32100/TCP 98m redis-cluster-alpha-follower-1 NodePort 10.96.30.84 6379:31101/TCP,16379:32101/TCP 98m redis-cluster-alpha-follower-2 NodePort 10.96.107.45 6379:31102/TCP,16379:32102/TCP 98m redis-cluster-alpha-leader-0 NodePort 10.96.138.108 6379:31000/TCP,16379:32000/TCP 130m redis-cluster-alpha-leader-1 NodePort 10.96.54.196 6379:31001/TCP,16379:32001/TCP 113m redis-cluster-alpha-leader-2 NodePort 10.96.62.103 6379:31002/TCP,16379:32002/TCP 98m

完成之后,我们可以通过NodeIp:NodePort的方式访问到redis cluster中的某个节点。例如,我们想访问redis-cluster-alpha-leader-0,就连接31000端口。

[root@k8s-master redis-6.2.6]# redis-cli -h 192.168.0.163 -p 31000 192.168.0.163:31002> cluster info cluster_state:ok cluster_slots_assigned:16384 cluster_slots_ok:16384 cluster_slots_pfail:0 cluster_slots_fail:0 cluster_known_nodes:6 cluster_size:3 cluster_current_epoch:4 cluster_my_epoch:3 #...


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3